package com.whfc.fmam.dao;

import com.whfc.fmam.entity.bo.FmamPlan;
import com.whfc.fmam.entity.dto.FmamPlanDTO;
import com.whfc.fmam.entity.dto.FmamPlanListCountDTO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;

@Repository
public interface FmamPlanMapper {
    int deleteByPrimaryKey(Integer id);

    int insert(FmamPlan record);

    int insertSelective(FmamPlan record);

    FmamPlan selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(FmamPlan record);

    int updateByPrimaryKey(FmamPlan record);

    /**
     * 逻辑删除
     *
     * @param id
     */
    void deleteLogicById(@Param("id") Integer id);

    /**
     * 根据主键ID搜索
     *
     * @param planId
     * @return
     */
    FmamPlanDTO selectByPlanId(@Param("planId") Integer planId);

    /**
     * 根据名称搜索
     *
     * @param name
     * @return
     */
    FmamPlanDTO selectByPlanName(@Param("name") String name);

    /**
     * 根据编号搜索
     *
     * @param code
     * @return
     */
    FmamPlanDTO selectByPlanCode(@Param("code") String code);


    /**
     * 查询材料计划列表
     *
     * @param userId    用户ID
     * @param deptId    组织机构ID
     * @param states    材料状态
     * @param startDate 开始日期
     * @param endDate   结束日期
     * @return 计划列表
     */
    List<FmamPlanDTO> selectPlanList(@Param("userId") Integer userId,
                                     @Param("deptId") Integer deptId,
                                     @Param("states") List<Integer> states,
                                     @Param("startDate") Date startDate,
                                     @Param("endDate") Date endDate);


    /**
     * 统计材料计划数量
     *
     * @param userId    用户ID
     * @param deptId    组织机构ID
     * @param states    材料状态
     * @param startDate 开始日期
     * @param endDate   结束日期
     * @return 计划列表数量
     */
    Integer countPlanList(@Param("userId") Integer userId,
                          @Param("deptId") Integer deptId,
                          @Param("states") List<Integer> states,
                          @Param("startDate") Date startDate,
                          @Param("endDate") Date endDate);

    /**
     * 统计材料计划数量
     *
     * @param deptId
     * @param startDate
     * @param endDate
     * @return
     */
    FmamPlanListCountDTO selectNumByDeptId(@Param("deptId") Integer deptId,
                                           @Param("startDate") Date startDate,
                                           @Param("endDate") Date endDate);
}